package nan.StackAndQueue;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

//使用数组实现环形队列
public class MyQueue2 {
    private int[] data=new int[100];
    //队列有效区间[head，tail)
    private int head=0;
    private int tail=0;
    private int size=0;
    //核心操作
    //1.入队列
    public boolean offer(int val){
        //队列满了
        if(size== data.length){
            return false;
        }
        //队列未满，把新元素放到tail对应的下标上
        data[tail]=val;
        tail++;
        //tail到达数组末尾，就需要tail从头开始
        if(tail== data.length){
            tail=0;
        }
        size++;
        return true;
    }
    //2.出队列
    public Integer poll(){
        if(size==0){
            return null;
        }
        int ret=data[head];
        //出队列，更新head位置
        head++;
        if(head== data.length){
            head=0;
        }
        size--;
        return ret;
    }
    //3.取队首元素
    public Integer peek(){
        if(size==0){
            return null;
        }
        return data[head];
    }

    public static void main(String[] args) {
        Stack<String> s=new Stack<>();
        Queue<String> q=new LinkedList<>();
    }
}
